몬테카르ㄹㄹㄹ로 방법으로 원 넓이 구하기 (Monte Carrrrlo Method)

개요

몬테카를로 방법 ( Monte Carlo method ) 을 통해 원 넓이를 근사적으로 구하고

matplotlib과 ploty 시각화 도구를 사용해서 직관적으로 이해하자.


들어가며

학창시절 우리는 원넓이를 구할 때 $\pi$$r^{2}$을 외우고 구했다. ( 대부분 이랬을거라 믿는다 )


본인은 대학생 신분일 시절 몬테카를로 방법에 대해 배우고

'원 넓이를 이렇게도 구할수 있구나' 라는 신선한 충격을 받았다.


몬테카를로 방법으로 원 넓이를 구하는 것을 처음 보는 분들은

나와 같은 충격을 받기를 바라며

이미 알고 있었던 분들은 시각화 도구로 어떻게 나타냈는가 보고 가시길



목차

몬테카를로 방법으로 원 넓이 구하기


matplotlib을 이용한 방법


plotly를 이용한 방법


여담


몬테카를로 방법으로 원 넓이 구하기

몬테카를로

몬테카를로 방법(Monte Carlo method)은 난수를 이용하여

함수의 값을 확률적으로 계산하는 알고리즘을 부르는 용어이다.

수학이나 물리학 등에 자주 사용되며, 계산하려는 값이 닫힌 형식으로 표현되지 않거나

복잡한 경우에 근사적으로 계산할 때 사용된다. - 네이버 지식백과

몬테카를로 방법은 쉽게 말해서 랜덤한 값으로 값을 확률적으로 계산하는 방법이다.

우리는 이 방법으로 반지름의 길이가 1인 원의 넓이를 구할 것이다.


먼저 우리가 배운 공식에 따르면 반지름의 길이가 1인 원의 넓이는

( $\pi$$r^{2}$ 공식에 따르면 ) $\pi$ , 3.141592····이다.


먼저

가로, 세로의 길이가 1인 도화지에 4등분한 원을 그려놓고

점을 무작위로 마구 찍은 다음

원안에 그려진 점의 개수를 보고 원의 넓이를 추정한다.


정확하게는

( 원 안에있는 점의 수 / 전체 찍은 점의 수 ) 하면

사분원 안에 점이 찍힐 확률이 나오고

위의 확률 * 4 를 하면 원 안에 점이 찍힐 확률을 구할 수 있는데

점의 개수를 무한히 늘린다면 이것은 원 넓이에 근사해진다는 것을 이용해

원 넓이를 구할 것이다.


내가 설명을 잘못해서 이해하기 어렵다면 ( 죄송합니다 )

직접 눈으로 확인해보자

백문이불여일견.


matplotlib을 이용한 방법

matplotlib

먼저 좌표평면에 반지름의 길이가 1인 사분원을 하나 그린다

다음의 코드를 사용해서 무작위로 점을 찍는다.

x_dot = np.random.rand(n)
y_dot = np.random.rand(n)

먼저 점 100개를 찍어보겠다.

원 밖의 점은 빨간색으로 원 안의 점은 파랑색으로 나타냈다.

100개의 점중에 원 안에 있는 점의 개수를 세어

원안에 점이 있을 확률을 구하고

이 값에 곱하기 4를하면 추정한 원의 넓이가 나온다.


점의 개수가 늘어날수록


무작위로 찍은점이 원 안에 있을 확률이 곧 원의 넓이와 비슷해진다는 것이다.


점의 수를 점점 늘려 보겠다.

차례대로 500개, 1000개, 10000개의 점을 찍었을 때 그림이다.

위의 방식 처럼 수를 늘려가다 보면

확률적으로 원의 넓이를 추청할 수 있었다.


plotly를 이용한 방법

plotly

plotly 를 이용한 방법도 위 matplotlib 방식과 동일하다.


다시 정의로 돌아가서...

몬테카를로 방법은 무작위 값을 이용하여 함수의 값을 확률적으로 계산하는 방법이다.

계산하려는 값이 닫힌 형식으로 표현되지 않거나 복잡한 경우에 근사적으로 계산할 때 사용된다.

어떤가 눈으로 직접 보고나니까 더 쉽게 다가오지 않는가

여러분도 신선한 충격을 받았길 바라며 스토리를 마무리 하겠다.


여담

여담

이름이 몬테카를로 방법인 이유는

이 방법을 고안한 수학자 스타니스와프 울람이

도박에서 엄청나게 많은 수의 게임을 했을때 승률을 알아보고자 했는데

여기에서 영감을 얻어 도박으로 유명한 모나코의 몬테카를로 도시의 이름을 붙였다.